package demo7;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import java.sql.SQLOutput;
/*
    如果当前类是单例模式，那么Spring容器在初始化时就会实例化该类实例并进行管理
    如果是多例的，则容器
 */
@Component
//@Scope("prototype")
public class Person {
    private String name;
    /*
    生命周期：
    构造器是一个对象生命周期中第一个被调用的函数
     */
    public Person(){
        System.out.println("1:Person的构造器被调用了");
    }

    public String getName() {
        return name;
    }
    /*
    Spring会在对象实例化完毕后陆续调用set方法利用注解@Value为属性赋值
     */
    @Value("张三")
    public void setName(String name) {
        System.out.println("2:name的set方法被调用了：setName()");
        this.name = name;
    }

    /*
    自定义方法，@PostConstruct注解，Spring容器初始化完毕以后调用该方法,方法名任意写
     */
    @PostConstruct
    public void init(){
        System.out.println("3：init方法被调用了！Spring容器将当前Person对象初始化完毕了！");
    }

    @PreDestroy
    public void perDestroy(){
        System.out.println("4:Spring容器在销毁当前对象前会调用这个方法：");
    }
}
